﻿/*
ĐỊNH DẠNG THEO CẤU HÌNH HỆ THỐNG - MANH.NGUYEN - 28/02/2011  
*/

function DinhDang(giaTri, kyHieuTachNhom, kyHieuThapPhanso, soChuSoThapPhan) {

    if (kyHieuTachNhom == null)
        kyHieuTachNhom = $('#groupingSymbol').val();
    if (kyHieuThapPhan == null)
        kyHieuThapPhan = $('#decimalSymbol').val();
    if (soChuSoThapPhan == null)
        soChuSoThapPhan = $('#decimalPlaces').val();
    
    giaTri != null ? giaTri.toString().replace(/\$|\,/g, '') : giaTri;

    //GIÁ TRỊ KHÔNG PHẢI LÀ SỐ (KHÔNG HỢP LỆ) CHUYỂN VỀ 0
    if (isNaN(giaTri)) giaTri = "0";    

    var j = 1;
    for (var i = 0; i < soChuSoThapPhan; i++) {
        j += "0";
    }

    //LÀM TRÒN GIÁ TRỊ PHẦN THẬP PHÂN
    giaTri = Math.floor(giaTri * j + 0.50000000001);

    phanThapPhan = giaTri % j;

    giaTri = Math.floor(giaTri / j).toString();

    if (phanThapPhan < 10) phanThapPhan = "0" + phanThapPhan;

    for (var i = 0; i < Math.floor((giaTri.length - (1 + i)) / 3); i++)
        giaTri = giaTri.substring(0, giaTri.length - (4 * i + 3)) + kyHieuTachNhom +

    giaTri.substring(giaTri.length - (4 * i + 3));

    if (giaTri != '0') { return soChuSoThapPhan != 0 ? (giaTri + kyHieuThapPhan + phanThapPhan) : giaTri; }
    else { return '0'; }
}

/*
-- VALUE: GIÁ TRỊ CẦN ĐỊNH DẠNG
-- SYMBOL: BIỂU TƯỢNG TIỀN TỆ
-- DECIMAL PLACES: SỐ KÝ TỰ ĐỨNG SAU DẤU THẬP PHÂN
-- GROUPING SYMBOL: KÝ TỰ TÁCH NHÓM
-- DECIMAL SYMBOL: KÝ TỰ THẬP PHÂN'
-- SUFFIX: HẬU TỐ (CÁC ĐƠN VỊ NHƯ VNĐ, VNĐ/m2..)
*/
function Format(value, prefix, isRound, suffix) {
    value != null ? value.toString().replace(/\$|\,/g, '') : value;

    prefix = prefix != null ? prefix : '';

    //LÀM TRÒN GIÁ TRỊ THEO CẤU HÌNH HỆ THỐNG

    if (isRound != null && isRound) {
        value = Round(value);
    }

    var decimalPlaces = $('#decimalPlaces').val();

    var groupingSymbol = $('#groupingSymbol').val();
    var decimalSymbol = $('#decimalSymbol').val();

    if (isNaN(value)) value = "0";
    if (suffix == null) suffix = '';

    //XỬ LÝ TRƯỜNG HỢP NGOẠI LỆ SỐ NHẬP VÀO NHỎ HƠN 1 - MANH.NGUYEN - 17/08/2011
    if ((value < 1) && (value > 0)) {
        //LẤY GIÁ TRỊ SAU DẤU THẬP PHÂN
        var tmp = String(value);
        tmp = tmp.substring(2);
        return (prefix + '0' + decimalSymbol + tmp + suffix);
    }

    var j = 1;
    for (var i = 0; i < decimalPlaces; i++) {
        j += "0";
    }

    //LÀM TRÒN GIÁ TRỊ PHẦN THẬP PHÂN
    value = Math.floor(value * j + 0.50000000001);

    cents = value % j;

    value = Math.floor(value / j).toString();
    if (cents < 10) cents = "0" + cents;

    for (var i = 0; i < Math.floor((value.length - (1 + i)) / 3); i++)
        value = value.substring(0, value.length - (4 * i + 3)) + groupingSymbol +

    value.substring(value.length - (4 * i + 3));
    if (value != '0') { return cents == 0 ? (prefix + value + suffix) : (prefix + value + decimalSymbol + cents + suffix); }
    else { return ''; }
}

// LÀM TRÒN TIỀN THEO CẤU HÌNH CỦA HỆ THỐNG
// CURRENCY FORMAT: SỐ CHỮ SỐ ĐƯỢC LÀM TRÒN (MẶC ĐỊNH LÀ 3)
// ROUND RULE: QUY TẮC LÀM TRÒN THÔNG THƯỜNG
// T: LÀM TRÒN THÔNG THƯỜNG (5 600 ~ 6 000)
// F: LÀM TRÒN THEO CÁCH KHÁC ( 5 600 ~ 5 000)
function Round(value) {
    var n = $("#currencyFormat").val();
    var roundRule = $("#roundRule").val();
    
    if (value < 0.5) return value;

    value = Math.floor(value * 1 + 0.50000000001) / 1;

    if (n == null || n == 0)
        return value;

    var strValue = String(value);
    var lenValue = strValue.length;
    if (lenValue >= n) {
        if (roundRule == 'T' && Number(strValue.substr(lenValue - n, 1)) >= 5) {
            var newValue = Number(strValue.substring(0, lenValue - n)) + 1;
            strValue = String(newValue);
        }
        else {
            if (strValue.length > n)
                strValue = strValue.substring(0, lenValue - n);
        }

        //cộng thêm n số 0
        if (lenValue > n || strValue.length == 1) {
            for (var index = 0; index < n; index++)
                strValue += "0";
        }
    }

    return Number(strValue);
    
    //LÀM TRÒN ĐẾN CHỮ SỐ THẬP PHÂN
    /*value = Math.floor(value * 1 + 0.50000000001) / 1;

    var a = String(value).split("");

    var tmp = "";
    var j = 1;

    if (a[a.length - n - 1] != null) {
        // NẾU CHỮ SỐ ĐANG XÉT LỚN HƠN 5 VÀ THEO QUY TẮC THÔNG THƯỜNG
        if (a[a.length - n] >= 5) {
            if(roundRule == 'T') {
                // TĂNG CHỮ SỐ TIẾP THEO LÊN 1 ĐƠN VỊ
                a[a.length - n - 1] = String(Number(a[a.length - n - 1]) + 1);
                a = Increase(a, n, j);
            }
            else {
                //NẾU KHÔNG THEO QUY TẮC BÌNH THƯỜNG THÌ LẤY GIÁ TRỊ CẬN DƯỚI CỦA SỐ ĐÓ
                a[a.length - n - 1] = String(Math.floor(Number(a[a.length - n - 1])));
            }
        }
        // THÊM CÁC CHỮ SỐ 0 ĐẰNG SAU CHO GIÁ TRỊ ĐƯỢC LÀM TRÒN
        for (i = a.length - 1; i > a.length - n - 1; i--) {
            a[i] = "0";
        }
    }
    else { 
        // XỬ LÝ TRONG TRƯỜNG HỢP 530 000 ~ 1 000 000 (LÀM TRÒN 6 CHỮ SỐ)     
        if ((a[a.length - n] >= 5) && (a.length == n)) {
            for (i = a.length - 1; i > a.length - n - 2; i--) {
                a[i] = "0";
            }
            tmp = "1";
        }
        // CÁC SỐ CÒN LẠI CHƯA VƯỢT NGƯỠNG LÀM TRÒN TRẢ VỀ GIÁ TRỊ 0
        // VD: 56 700 ~ 0 (LÀM TRÒN 6 CHỮ SỐ)
        else {
            return 0;
        }
    }
        
    for (i = 0; i < a.length; i++) {
        tmp = tmp + a[i];
    }
    
    return Number(tmp);*/
}
